package com.ruoyi.common.utils.file;

import com.ruoyi.common.utils.SHA1;
import com.ruoyi.common.utils.StrUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;

/**
 * 文件类型工具类
 *
 * @author ruoyi
 */
public class FileTypeUtils {
    /**
     * 获取文件类型
     * <p>
     * 例如: ruoyi.txt, 返回: txt
     *
     * @param file 文件名
     * @return 后缀（不含".")
     */
    public static String getFileType(File file) {
        if (null == file) {
            return StringUtils.EMPTY;
        }
        return getFileType(file.getName());
    }

    /**
     * 获取文件类型
     * <p>
     * 例如: ruoyi.txt, 返回: txt
     *
     * @param fileName 文件名
     * @return 后缀（不含".")
     */
    public static String getFileType(String fileName) {
        int separatorIndex = fileName.lastIndexOf(".");
        if (separatorIndex < 0) {
            return "";
        }
        return fileName.substring(separatorIndex + 1).toLowerCase();
    }

    /**
     * 获取文件类型
     *
     * @param photoByte 文件字节码
     * @return 后缀（不含".")
     */
    public static String getFileExtendName(byte[] photoByte) {
        String strFileExtendName = "JPG";
        if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
                && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) {
            strFileExtendName = "GIF";
        } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) {
            strFileExtendName = "JPG";
        } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) {
            strFileExtendName = "BMP";
        } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) {
            strFileExtendName = "PNG";
        }
        return strFileExtendName;
    }

    public static boolean isImage(String name) {
        String extendName = FileTypeUtils.getFileType(name);
        if (StrUtils.isEmpty(extendName)) return false;
        for (int i = 0; i < MimeTypeUtils.IMAGE_UPLOAD_ALLOWS.length; i++) {
            if (extendName.equals(MimeTypeUtils.IMAGE_UPLOAD_ALLOWS[i])) {
                return true;
            }
        }
        return false;
    }

    /**
     * 图片只允许 jpg png jpeg
     *
     * @param bytes 图片bytes
     * @return 错误的图片类型
     */
    public static String isAllowImageEnd(byte[] bytes) {
        byte[] prefix = new byte[4];
        prefix[0] = bytes[0];
        prefix[1] = bytes[1];
        prefix[2] = bytes[2];
        prefix[3] = bytes[3];
        String type = SHA1.bytesToHexString(prefix).toUpperCase();
        if (type.contains("FFD8FF") || type.contains("89504E47") || type.contains("47494638")) {
            return null;
        } else if (type.contains("52494646")) {
            return MimeTypeUtils.IMAGE_WEBP;
        } else if (type.contains("49492A00")) {
            return "tif";
        } else {
            return "未知图片类型";
        }
    }
}
